package lu.med.praxiswahl.wahlumed.service.beans;

import java.util.Calendar;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import lu.med.praxiswahl.wahlumed.dao.beans.daointerface.BefundeDAOInt;
import lu.med.praxiswahl.wahlumed.model.beans.BefundeTBL;
import lu.med.praxiswahl.wahlumed.model.beans.CustomerTBL;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.BefundeServiceInt;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.CustomerServiceInt;

/**
 * Session Bean implementation class BefundeService
 */
@Stateless
@Remote({ BefundeServiceInt.class })
public class BefundeService implements BefundeServiceInt {

	@EJB
	private CustomerServiceInt cust;

	private BefundeTBL tmpBefun;

	@EJB
	private BefundeDAOInt befunDao;

	/**
	 * Default constructor.
	 */
	public BefundeService() {
		tmpBefun = new BefundeTBL();
	}

	/**
	 * @see BefundeServiceInt#getTyp()
	 */
	public String getTyp() {

		return tmpBefun.getTyp();
	}

	/**
	 * @see BefundeServiceInt#createBefundeItem(Calendar, String)
	 */
	public int createBefundeItem(Calendar datum, String matricule, String typ,
			String bezeichner, String text) {

		BefundeTBL tmpBefun_1 = new BefundeTBL();

		tmpBefun_1.setDatum(datum);
		tmpBefun_1.setCustomer(cust.getCustomer(matricule));
		tmpBefun_1.setTyp(typ);
		tmpBefun_1.setBezeichner(bezeichner);
		tmpBefun_1.setText(text);

		befunDao.persist(tmpBefun_1);

		return RET_OPERATION_DONE_PROPERLY;
	}

	@Override
	public BefundeTBL[] getBefundeByCustomer(String matricule) {
		Object[] tmp = befunDao.retrieveBefundeItemsByCustomer(matricule)
				.toArray();
		BefundeTBL[] eintraege = new BefundeTBL[tmp.length];

		for (int i = 0; i < tmp.length; i++) {
			eintraege[i] = (BefundeTBL) tmp[i];
		}
		return eintraege;
	}

	/**
	 * @see BefundeServiceInt#setExtern_category(String)
	 */
	public void setExtern_category(String extern_category) {

		tmpBefun.setExtern_category(extern_category);
		befunDao.update(tmpBefun);
	}

	/**
	 * @see BefundeServiceInt#setBezeichner(String)
	 */
	public void setBezeichner(String bezeichner) {

		tmpBefun.setBezeichner(bezeichner);
		befunDao.update(tmpBefun);
	}

	/**
	 * @see BefundeServiceInt#getCustomer()
	 */
	public CustomerTBL getCustomer() {

		return tmpBefun.getCustomer();
	}

	/**
	 * @see BefundeServiceInt#getA_BefundeInstance(BefundeTBL)
	 */
	public void getA_BefundeInstance(BefundeTBL befunde) {

		tmpBefun = befunde;
	}

	/**
	 * @see BefundeServiceInt#setText(String)
	 */
	public void setText(String text) {

		tmpBefun.setText(text);
		befunDao.update(tmpBefun);
	}

	/**
	 * @see BefundeServiceInt#setDatum(Calendar)
	 */
	public void setDatum(Calendar datum) {

		tmpBefun.setDatum(datum);
		befunDao.update(tmpBefun);
	}

	/**
	 * @see BefundeServiceInt#getBezeichner()
	 */
	public String getBezeichner() {
		return tmpBefun.getBezeichner();
	}

	/**
	 * @see BefundeServiceInt#setCustomer(CustomerTBL)
	 */
	public void setCustomer(CustomerTBL customer) {
		tmpBefun.setCustomer(customer);
		befunDao.update(tmpBefun);
	}

	/**
	 * @see BefundeServiceInt#getText()
	 */
	public String getText() {
		return tmpBefun.getText();
	}

	/**
	 * @see BefundeServiceInt#getDatum()
	 */
	public Calendar getDatum() {
		return tmpBefun.getDatum();
	}

	/**
	 * @see BefundeServiceInt#getExtern_category()
	 */
	public String getExtern_category() {
		return tmpBefun.getExtern_category();
	}

	/**
	 * @see BefundeServiceInt#setTyp(String)
	 */
	public void setTyp(String typ) {
		tmpBefun.setTyp(typ);
		befunDao.update(tmpBefun);
	}

	/**
	 * @see BefundeServiceInt#getBefunde_nummer()
	 */
	public Long getBefunde_nummer() {
		return null;
	}

	@Override
	public int deleteBefunde(Long id) {
		this.befunDao.delete(id);
		return RET_OPERATION_DONE_PROPERLY;
	}

	public Long getSubPrimaryKeyIndex() {
		return this.befunDao.findDatabaseSubPrimaryKeyIndex();
	}

	@Override
	public void update_date(Long id, Calendar datum) {
		BefundeTBL tmpBef_1 = this.befunDao.retrieveBefundeItemByID(id);
		tmpBef_1.setDatum(datum);
		this.befunDao.update(tmpBef_1);

	}

	@Override
	public void update_bezeichner(Long id, String bezeichner) {

		BefundeTBL tmpBef_1 = this.befunDao.retrieveBefundeItemByID(id);
		tmpBef_1.setBezeichner(bezeichner);
		this.befunDao.update(tmpBef_1);

	}

	@Override
	public void update_text(Long id, String text) {

		BefundeTBL tmpBef_1 = this.befunDao.retrieveBefundeItemByID(id);
		tmpBef_1.setText(text);
		this.befunDao.update(tmpBef_1);

	}

}
